// yzm.web.1.2.1
// 作者 : 立树
// 日期 : 2017-11-20
// 来源 : hhtools.web.js
// 文档 : http://studio.houheaven.com

// 说明 : 获取验证码插件
// 更新 : 优化了图片验证码，返回结果添加了验证码状态（yzm_state）
function is_phone(str)
{
	 
	  var myreg=/^[1][3,4,5,7,8,9,6][0-9]{9}$/;  
      if (!myreg.test(str)) {  
          return false;  
      } else {  
          return true;  
      }  
}

function loadFile(filename, filetype){
	if (filetype=="js"){ // 判断文件类型
		var fileref=document.createElement('script')// 创建标签
		fileref.setAttribute("type","text/javascript")// 定义属性type的值为text/javascript
		 fileref.setAttribute("src", filename)// 文件的地址
		}
		else if (filetype=="css"){ // 判断文件类型
		var fileref=document.createElement("link")
		 fileref.setAttribute("rel", "stylesheet")
		 fileref.setAttribute("type", "text/css")
		 fileref.setAttribute("href", filename)
		}
		if (typeof fileref!="undefined")
		 document.getElementsByTagName("head")[0].appendChild(fileref)
}
loadFile("/static/plugin/hhYzm/yzm.css","css");
;(function($,window){
$.fn.YzmProc = function(params){
	
	// 默认参数
	var hhdef = {
		elm: "",       // 收入手机号的输入框
		url: "",       // 请求手机验证码的地址
		safe: "",      // 请求图片验证码的地址（安全模式）
		duration: 60   // 获取验证码的生命周期
	};
	
	// 功能参数
	var hhopt = $.extend({},hhdef,params);
	//$(hhopt.elm).val("15050050"+Math.floor(Math.random()*899+100));
	
	// 是否使用安全模式
	if( hhopt.safe )
	{
		if( $(".hhYzmSlider_html").length==0 )
		{
			var html;
			html  = '<div class="hhYzmSlider_html hide">';
			html += '  <img class="YzmPic" />';
			html += '  <ul class="YzmAnswer">';
			html += '  <li>0</li>';
			html += '  <li>0</li>';
			html += '  <li>0</li>';
			html += '  </ul>';
			html += '  <p class="YzmTip">请选择正确的答案</p>';
			html += '</div>';
			$("body").append(html);
		}
	}
	
	this.on("click",function(){
		
		hhopt.trigger = $(this);
		
		// 发送成功后，不能再次点击
		if( hhopt.trigger.is(".disable") )
		{
			return;
		}
		
		// 请检查参数
		if( !hhopt.elm || !hhopt.url || !hhopt.duration )
		{
			layer.msg("非法参数");
			return;
		}
		
		// 验证手机号
		var elm = $(hhopt.elm);
		var val = elm.val();
		switch(true)
		{
			case val=="":
				layer.msg("请输入 手机号！",{shift:6},function(){ elm.focus(); });
				return;
			case !is_phone(val):
				layer.msg("请输入有效的 手机号！",{shift:6},function(){ elm.focus(); });
				return;
		}
		
		// 标记手机号
		hhopt.phone = val;
		
		// 发送数据
		if( hhopt.safe )
			fnYzmProc();
		else
			fnSendMsg();
	});
	
	// 获取验证码
	function fnYzmProc()
	{
		var url = hhopt.safe;
		var fnAjax = /^http/.test(url)?AjaxSafe:AjaxTemp;
		fnAjax(url,function(ret){
			if( ret.state )
			{
				$.extend(true,hhopt,{yzm:ret.data});
				fnYzmInit();
			}
			else
				layer.msg(ret.msg);
		});
	}
	
	// 验证码面板初始化
	function fnYzmInit(data)
	{
		if( $(".hhYzmSlider").length==0 )
		{
			layer.open({
				type: 1,
				title: false,
				skin: "hhYzmSlider",
				shadeClose: true,
				area: ["260px","210px"],
				content: $(".hhYzmSlider_html").html(),
				success: function(layelm){
					// 赋值
					hhopt.yzm.elm = layelm;
					$(layelm).find(".YzmPic").attr({src:hhopt.yzm.img});
					$(layelm).find(".YzmAnswer li:eq(0)").text(hhopt.yzm.result[0]);
					$(layelm).find(".YzmAnswer li:eq(1)").text(hhopt.yzm.result[1]);
					$(layelm).find(".YzmAnswer li:eq(2)").text(hhopt.yzm.result[2]);
					// 绑定事件
					$(layelm).find(".YzmPic").click(function(){
						fnYzmProc();
					});
					$(layelm).find(".YzmAnswer li").click(function(){
						hhopt.yzm.chosen = $(this).text();
						fnSendMsg();
					});
				}
			});
		}
		else
		{
			var elm = $(".hhYzmSlider");
			elm.find(".YzmPic").attr({src:hhopt.yzm.img});
			elm.find(".YzmAnswer li:eq(0)").text(hhopt.yzm.result[0]);
			elm.find(".YzmAnswer li:eq(1)").text(hhopt.yzm.result[1]);
			elm.find(".YzmAnswer li:eq(2)").text(hhopt.yzm.result[2]);
		}
	}
	
	// 发送短信验证码
	function fnSendMsg()
	{
		var url = hhopt.url;
		url = url.replace(/{{phone}}/g,hhopt.phone);
		url = url.replace(/{{code}}/g,!hhopt.yzm || hhopt.yzm.chosen);
		url = url.replace(/{{token}}/g,!hhopt.yzm || hhopt.yzm.token);
		var fnAjax = /^http/.test(url)?AjaxSafe:AjaxTemp;
		fnAjax(url,function(ret){
			if( ret.state )
			{
				// 关闭验证码面板
				if( hhopt.safe )
				{
					layer.closeAll();
				}
				
				// 时间问题
				var timer = hhopt.duration;
				var flag = setInterval(function(){
					if( --timer<=0 )
					{
						clearInterval(flag);
						hhopt.trigger.html("获取验证码").removeClass("disable");
					}
					else
						hhopt.trigger.html(timer+" 秒");
				},1000);
				hhopt.trigger.html(timer+" 秒").addClass("disable");
				layer.msg("已发送");
			}
			else
			{
				// 启用图片验证码
				if( hhopt.safe )
				{
					if( !ret.data.yzm_state )
					{
						// 图片验证码选择错误
						fnYzmProc();
						var YzmTip = hhopt.yzm.elm.find(".YzmTip");
						YzmTip.addClass("YzmError").text("选择错误");
						setTimeout(function(){ YzmTip.removeClass("YzmError").text("请选择正确的答案"); },600);
					}
					else
					{
						// 图片验证码选择正确，其他错误（比如：账号已存在、发送时间过短 等）
						layer.closeAll();
						layer.msg(ret.msg);
					}
				}
				else
					layer.msg(ret.msg);
			}
		});
	}
	
	// 保持 jQuery 链式完整
	return this;
};
})(jQuery,window);


function Console(val)
{
	ret = "";
	
	if( arguments.length==0 )
		ret = "未填写参数";
	else
		for(i=0;i<arguments.length;i++)
		{
			str = arguments[i];
			ret += (typeof(str)=="object")?JSON.stringify(str):str;
		}
	
	console.log(ret);
}


//Ajax.web.1.1.2
//作者 : 立树
//日期 : 2017-09-21
//来源 : hhtools.web.js
//文档 : http://studio.houheaven.com

//更新 : 
//使用 hhPanel.loader(3) 替代 api.showProgress 。

function AjaxTemp(url,data,success,failed)
{
	// 两种调用方式
	// GET  -- Ajax(url,success,failed);
	// POST -- Ajax(url,postdata,success,failed);
	
	// 6 中可能的情况
	// 1,n,n,n
	// 1,2,n,n
	// 1,2,3,n
	// 1,2,3,4
	// 1,n,2,n
	// 1,n,3,4
	
	var hhopt = {};
	hhopt.url = url;
	hhopt.data = "";
	hhopt.type = "get";
	hhopt.success = function(ret){
		if(!ret.state)
			layer.msg(ret.msg);
	};
	hhopt.failed  = function(ret){
		layer.confirm("网络异常，是否重新加载？",{
			yes:function(){ location.reload(true); },
			cancel:function(){ history.back(); }
		});
	};
	
	var argu = arguments;
	switch(argu.length)
	{
		case 2:
			if( typeof(argu[1])!="function" )
			{
				// String、Object
				hhopt.type = "post";
				hhopt.data = argu[1];
			}
			else
				hhopt.success = argu[1];
			break;
		case 3:
			if( typeof(argu[1])!="function" )
			{
				hhopt.type = "post";
				hhopt.data = argu[1];
				hhopt.success = argu[2];
			}
			else
			{
				hhopt.success = argu[1];
				hhopt.failed  = argu[2];
			}
			break;
		case 4:
			hhopt.type    = "post";
			hhopt.data    = argu[1];
			hhopt.success = argu[2];
			hhopt.failed  = argu[3];
			break;
	}
	
	// 显示加载提示
	isAjaxGhost = typeof(isAjaxGhost)!="undefined"?isAjaxGhost:false;
	if( isAjaxGhost!=true )
	{
		//hhPanel.loader(3);
	}
	
	$.ajax({
		url: decodeURIComponent(hhopt.url),
		type: hhopt.type,
		data: hhopt.data,
		dataType: "json",
		success: function(ret){
			//isAjaxGhost = false;
			Console("Ajax Params : ",hhopt);
			Console("Ajax Return : ",ret);
//			layer.closeAll("prompt");
//			layer.closeAll("confirm");
//			layer.closeAll("loading");
//			hhPanel.loader("hide");
			hhopt.success(ret);
		},
		error:function(err){
			//isAjaxGhost = false;
			Console("Ajax Params : ",hhopt);
			Console("Ajax Errors : ",err);
//			layer.closeAll("prompt");
//			layer.closeAll("confirm");
//			layer.closeAll("loading");
//			hhPanel.loader("hide");
	    	hhopt.failed();
		}
	});
 
}

